#ifndef __RING_QUEUE_H__
#define __RING_QUEUE_H__
#include "hashSet/hashSet.h"
#include "../../log/systemLog/systemLog.h"

// 环形队列结构体 本质上是一个数组，数组的每个元素是一个哈希集合
typedef struct ring_queue_s
{
    hash_set_t *set;   // 哈希集合的数组指针
    int capacity;      // 数组容量
    int current_index; // 当前索引位置
} ring_queue_t;

/**
 * @brief 初始化环形队列
 * 
 * @param queue 需要初始化的环形队列
 * @param capacity 环形队列容量
 * @param set_size 每个哈希集合的大小
 * @return system_error_code_t 初始化结果
 */
system_error_code_t ring_queue_init(ring_queue_t *queue, int capacity, int set_size);

/**
 * @brief 向环形队列中添加文件描述符，并返回添加的文件描述符在环形队列中的哈希集合索引位置
 * 
 * @param queue 环形队列
 * @param fd 需要添加的文件描述符
 * @param index 返回添加的哈希集合索引位置
 * @return system_error_code_t 添加结果
 */
system_error_code_t ring_enqueue(ring_queue_t *queue, int fd, int *index);

/**
 * @brief 从环形队列中根据索引位置删除指定文件描述符
 * 
 * @param queue 环形队列
 * @param fd 需要删除的文件描述符
 * @param index 哈希集合在环形队列中的索引位置
 * @return system_error_code_t 删除结果
 */
system_error_code_t ring_dequeue_by_index(ring_queue_t *queue, int fd, int index);


#endif // __RING_QUEUE_H__